Database SQL – Sub Query
Subquery หรือ Inner query หรือ Nested query เป็นการดึงข้อมูลใน table จาก ผลลัพธ์ของการทำ SQL Select query ก่อนหน้านี้อีกทีอีกที ซึ่งการทำ subquery สามารถใช้งาน Where Clause ไม่ว่าจะเป็น main query หรือ ส่วนของ subquery ส่วนมากแล้วมักถูกใช้ในเงือนไขที่ main query ไม่สามารถดึงข้อมูลได้ตามเงือนไขปกติที่สามารถทำได้ หรือ ติดข้อจำกัดภายใต้กฎของ SQL โดย subquery เองสามารถถูกใช้ภายใต้ SQL Select, SQL Insert, SQL Update และ SQL Delete ที่เป็น statement และ SQL Operator ต่างๆ
กฎการใช้งาน Subquery
- Subquery ต้องอยู่ภายใต้ วงเล็บ
- Subquery สามารถมีได้อย่างน้อย 1 column ใน Select Clause นอกจาก main query จะมีหลาย column ซึ่งทั้งหมดต้องมีใน subquery เพื่ออ้างอิงด้วย
- SQL ORDER BY ไม่สามารถใช้ใน subquery ได้ แต่ main query สามารถใช้ได้
- SQL GROUP BY ไม่สามารถใช้ใน subquery ได้ แต่ main query สามารถใช้ได้
- ไม่สามารถ select ข้อมูลที่เป็นแบบอ้างอิง เช่น BLOB, ARRAY, CLOB หรือ NCLOB
- ไม่สามารถใช้ BETWEEN Operator กับ subquery ได้ แต่สามารถใช้ภายใต้ subquery ได้
Subquery โดย Select Statement
SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
ตัวอย่าง subquery โดย select statement
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 35 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
คำสั่ง
SQL> SELECT *
FROM CUSTOMERS
WHERE ID IN (SELECT ID
FROM CUSTOMERS
WHERE SALARY > 4500) ;
ผลลัพธ์
+----+----------+-----+---------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+---------+----------+
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+---------+----------+
Subquery โดย Insert Statement
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]
ตัวอย่าง subquery โดย insert statement
SQL> INSERT INTO CUSTOMERS_BKP
SELECT * FROM CUSTOMERS
WHERE ID IN (SELECT ID
FROM CUSTOMERS) ;
Subquery โดย Update Statement
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
ตัวอย่าง subquery โดย update statement
คำสั่ง
SQL> UPDATE CUSTOMERS
SET SALARY = SALARY * 0.25
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
WHERE AGE >= 27 );
ผลลัพธ์
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 35 | Ahmedabad | 125.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 2125.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
Subquery โดย Delete Statement
DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
ตัวอย่าง subquery โดย delete statement
คำสั่ง
SQL> DELETE FROM CUSTOMERS
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
WHERE AGE >= 27 );
ผลลัพธ์
+----+----------+-----+---------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+---------+----------+
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+---------+----------+
Reference:
รวมคำสั่ง SQL Command พื้นฐานเบื้องต้น
Author: Suphakit Annoppornchai
Credit: https://saixiii.com, https://www.tutorialspoint.com